home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / usr / include / linux / kdev_t.h < prev    next >
C/C++ Source or Header  |  2005-10-13  |  2KB  |  102 lines

  1. #ifndef _LINUX_KDEV_T_H
  2. #define _LINUX_KDEV_T_H
  3. #ifdef __KERNEL__
  4. #define MINORBITS    20
  5. #define MINORMASK    ((1U << MINORBITS) - 1)
  6.  
  7. #define MAJOR(dev)    ((unsigned int) ((dev) >> MINORBITS))
  8. #define MINOR(dev)    ((unsigned int) ((dev) & MINORMASK))
  9. #define MKDEV(ma,mi)    (((ma) << MINORBITS) | (mi))
  10.  
  11. #define print_dev_t(buffer, dev)                    \
  12.     sprintf((buffer), "%u:%u\n", MAJOR(dev), MINOR(dev))
  13.  
  14. #define format_dev_t(buffer, dev)                    \
  15.     ({                                \
  16.         sprintf(buffer, "%u:%u", MAJOR(dev), MINOR(dev));    \
  17.         buffer;                            \
  18.     })
  19.  
  20. /* acceptable for old filesystems */
  21. static inline int old_valid_dev(dev_t dev)
  22. {
  23.     return MAJOR(dev) < 256 && MINOR(dev) < 256;
  24. }
  25.  
  26. static inline u16 old_encode_dev(dev_t dev)
  27. {
  28.     return (MAJOR(dev) << 8) | MINOR(dev);
  29. }
  30.  
  31. static inline dev_t old_decode_dev(u16 val)
  32. {
  33.     return MKDEV((val >> 8) & 255, val & 255);
  34. }
  35.  
  36. static inline int new_valid_dev(dev_t dev)
  37. {
  38.     return 1;
  39. }
  40.  
  41. static inline u32 new_encode_dev(dev_t dev)
  42. {
  43.     unsigned major = MAJOR(dev);
  44.     unsigned minor = MINOR(dev);
  45.     return (minor & 0xff) | (major << 8) | ((minor & ~0xff) << 12);
  46. }
  47.  
  48. static inline dev_t new_decode_dev(u32 dev)
  49. {
  50.     unsigned major = (dev & 0xfff00) >> 8;
  51.     unsigned minor = (dev & 0xff) | ((dev >> 12) & 0xfff00);
  52.     return MKDEV(major, minor);
  53. }
  54.  
  55. static inline int huge_valid_dev(dev_t dev)
  56. {
  57.     return 1;
  58. }
  59.  
  60. static inline u64 huge_encode_dev(dev_t dev)
  61. {
  62.     return new_encode_dev(dev);
  63. }
  64.  
  65. static inline dev_t huge_decode_dev(u64 dev)
  66. {
  67.     return new_decode_dev(dev);
  68. }
  69.  
  70. static inline int sysv_valid_dev(dev_t dev)
  71. {
  72.     return MAJOR(dev) < (1<<14) && MINOR(dev) < (1<<18);
  73. }
  74.  
  75. static inline u32 sysv_encode_dev(dev_t dev)
  76. {
  77.     return MINOR(dev) | (MAJOR(dev) << 18);
  78. }
  79.  
  80. static inline unsigned sysv_major(u32 dev)
  81. {
  82.     return (dev >> 18) & 0x3fff;
  83. }
  84.  
  85. static inline unsigned sysv_minor(u32 dev)
  86. {
  87.     return dev & 0x3ffff;
  88. }
  89.  
  90.  
  91. #else /* __KERNEL__ */
  92.  
  93. /*
  94. Some programs want their definitions of MAJOR and MINOR and MKDEV
  95. from the kernel sources. These must be the externally visible ones.
  96. */
  97. #define MAJOR(dev)    ((dev)>>8)
  98. #define MINOR(dev)    ((dev) & 0xff)
  99. #define MKDEV(ma,mi)    ((ma)<<8 | (mi))
  100. #endif /* __KERNEL__ */
  101. #endif
  102.